{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "mS0bWISTqhMI",
        "outputId": "c67bb709-77f1-45f5-976b-932f976e3b24"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "Using backend: pytorch\n",
            "/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n",
            "  import pandas.util.testing as tm\n"
          ]
        }
      ],
      "source": [
        "import dgl.nn as dglnn\n",
        "from dgl import from_networkx\n",
        "import torch.nn as nn\n",
        "import torch as th\n",
        "import torch.nn.functional as F\n",
        "import dgl.function as fn\n",
        "import networkx as nx\n",
        "import pandas as pd\n",
        "import socket\n",
        "import struct\n",
        "import random\n",
        "from sklearn.preprocessing import LabelEncoder\n",
        "from sklearn.preprocessing import StandardScaler\n",
        "from sklearn.model_selection import train_test_split\n",
        "import category_encoders as ce\n",
        "from sklearn.decomposition import PCA\n",
        "import seaborn as sns\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "id": "ki0watiErdJp"
      },
      "outputs": [],
      "source": [
        "data = pd.read_csv('/content/NF-ToN-IoT.csv')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 439
        },
        "id": "0JmyVopVrqWQ",
        "outputId": "b53ec05a-1324-45db-aba6-94cc7fecea40"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>IPV4_SRC_ADDR</th>\n",
              "      <th>L4_SRC_PORT</th>\n",
              "      <th>IPV4_DST_ADDR</th>\n",
              "      <th>L4_DST_PORT</th>\n",
              "      <th>PROTOCOL</th>\n",
              "      <th>L7_PROTO</th>\n",
              "      <th>IN_BYTES</th>\n",
              "      <th>OUT_BYTES</th>\n",
              "      <th>IN_PKTS</th>\n",
              "      <th>OUT_PKTS</th>\n",
              "      <th>TCP_FLAGS</th>\n",
              "      <th>FLOW_DURATION_MILLISECONDS</th>\n",
              "      <th>Label</th>\n",
              "      <th>Attack</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>192.168.1.195</td>\n",
              "      <td>63318</td>\n",
              "      <td>52.139.250.253</td>\n",
              "      <td>443</td>\n",
              "      <td>6</td>\n",
              "      <td>91.00</td>\n",
              "      <td>181</td>\n",
              "      <td>165</td>\n",
              "      <td>2</td>\n",
              "      <td>1</td>\n",
              "      <td>24</td>\n",
              "      <td>327</td>\n",
              "      <td>0</td>\n",
              "      <td>Benign</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>192.168.1.79</td>\n",
              "      <td>57442</td>\n",
              "      <td>192.168.1.255</td>\n",
              "      <td>15600</td>\n",
              "      <td>17</td>\n",
              "      <td>0.00</td>\n",
              "      <td>63</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>Benign</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>192.168.1.79</td>\n",
              "      <td>57452</td>\n",
              "      <td>239.255.255.250</td>\n",
              "      <td>15600</td>\n",
              "      <td>17</td>\n",
              "      <td>0.00</td>\n",
              "      <td>63</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>Benign</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>192.168.1.193</td>\n",
              "      <td>138</td>\n",
              "      <td>192.168.1.255</td>\n",
              "      <td>138</td>\n",
              "      <td>17</td>\n",
              "      <td>10.16</td>\n",
              "      <td>472</td>\n",
              "      <td>0</td>\n",
              "      <td>2</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>Benign</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>192.168.1.79</td>\n",
              "      <td>51989</td>\n",
              "      <td>192.168.1.255</td>\n",
              "      <td>15600</td>\n",
              "      <td>17</td>\n",
              "      <td>0.00</td>\n",
              "      <td>63</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>Benign</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379269</th>\n",
              "      <td>192.168.1.31</td>\n",
              "      <td>58032</td>\n",
              "      <td>192.168.1.194</td>\n",
              "      <td>80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>9433</td>\n",
              "      <td>1</td>\n",
              "      <td>ddos</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379270</th>\n",
              "      <td>192.168.1.31</td>\n",
              "      <td>58034</td>\n",
              "      <td>192.168.1.194</td>\n",
              "      <td>80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>9221</td>\n",
              "      <td>1</td>\n",
              "      <td>ddos</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379271</th>\n",
              "      <td>192.168.1.31</td>\n",
              "      <td>58036</td>\n",
              "      <td>192.168.1.194</td>\n",
              "      <td>80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>9656</td>\n",
              "      <td>1</td>\n",
              "      <td>ddos</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379272</th>\n",
              "      <td>192.168.1.31</td>\n",
              "      <td>58038</td>\n",
              "      <td>192.168.1.194</td>\n",
              "      <td>80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>10046</td>\n",
              "      <td>1</td>\n",
              "      <td>ddos</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379273</th>\n",
              "      <td>192.168.1.31</td>\n",
              "      <td>58040</td>\n",
              "      <td>192.168.1.194</td>\n",
              "      <td>80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>10485</td>\n",
              "      <td>1</td>\n",
              "      <td>ddos</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>1379274 rows × 14 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "         IPV4_SRC_ADDR  L4_SRC_PORT  ... Label  Attack\n",
              "0        192.168.1.195        63318  ...     0  Benign\n",
              "1         192.168.1.79        57442  ...     0  Benign\n",
              "2         192.168.1.79        57452  ...     0  Benign\n",
              "3        192.168.1.193          138  ...     0  Benign\n",
              "4         192.168.1.79        51989  ...     0  Benign\n",
              "...                ...          ...  ...   ...     ...\n",
              "1379269   192.168.1.31        58032  ...     1    ddos\n",
              "1379270   192.168.1.31        58034  ...     1    ddos\n",
              "1379271   192.168.1.31        58036  ...     1    ddos\n",
              "1379272   192.168.1.31        58038  ...     1    ddos\n",
              "1379273   192.168.1.31        58040  ...     1    ddos\n",
              "\n",
              "[1379274 rows x 14 columns]"
            ]
          },
          "execution_count": 3,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "data"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "id": "PoVYaeFZtJBd"
      },
      "outputs": [],
      "source": [
        "data['IPV4_SRC_ADDR'] = data.IPV4_SRC_ADDR.apply(lambda x: socket.inet_ntoa(struct.pack('>I', random.randint(0xac100001, 0xac1f0001))))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "zs4z58WCtu8k"
      },
      "outputs": [],
      "source": [
        "data['IPV4_SRC_ADDR'] = data.IPV4_SRC_ADDR.apply(str)\n",
        "data['L4_SRC_PORT'] = data.L4_SRC_PORT.apply(str)\n",
        "data['IPV4_DST_ADDR'] = data.IPV4_DST_ADDR.apply(str)\n",
        "data['L4_DST_PORT'] = data.L4_DST_PORT.apply(str)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "id": "9EEwTAK3tle9"
      },
      "outputs": [],
      "source": [
        "data['IPV4_SRC_ADDR'] = data['IPV4_SRC_ADDR'] + ':' + data['L4_SRC_PORT']\n",
        "data['IPV4_DST_ADDR'] = data['IPV4_DST_ADDR'] + ':' + data['L4_DST_PORT']"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "id": "xbdaHUxOtzd-"
      },
      "outputs": [],
      "source": [
        "data.drop(columns=['L4_SRC_PORT','L4_DST_PORT'],inplace=True)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 439
        },
        "id": "CN9rLLmr0eeI",
        "outputId": "9f79c3e6-b1f2-4af8-8fc2-3ba23dea1ee4"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>IPV4_SRC_ADDR</th>\n",
              "      <th>IPV4_DST_ADDR</th>\n",
              "      <th>PROTOCOL</th>\n",
              "      <th>L7_PROTO</th>\n",
              "      <th>IN_BYTES</th>\n",
              "      <th>OUT_BYTES</th>\n",
              "      <th>IN_PKTS</th>\n",
              "      <th>OUT_PKTS</th>\n",
              "      <th>TCP_FLAGS</th>\n",
              "      <th>FLOW_DURATION_MILLISECONDS</th>\n",
              "      <th>Label</th>\n",
              "      <th>Attack</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>172.18.174.73:63318</td>\n",
              "      <td>52.139.250.253:443</td>\n",
              "      <td>6</td>\n",
              "      <td>91.00</td>\n",
              "      <td>181</td>\n",
              "      <td>165</td>\n",
              "      <td>2</td>\n",
              "      <td>1</td>\n",
              "      <td>24</td>\n",
              "      <td>327</td>\n",
              "      <td>0</td>\n",
              "      <td>Benign</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>172.21.105.22:57442</td>\n",
              "      <td>192.168.1.255:15600</td>\n",
              "      <td>17</td>\n",
              "      <td>0.00</td>\n",
              "      <td>63</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>Benign</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>172.27.67.73:57452</td>\n",
              "      <td>239.255.255.250:15600</td>\n",
              "      <td>17</td>\n",
              "      <td>0.00</td>\n",
              "      <td>63</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>Benign</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>172.24.40.184:138</td>\n",
              "      <td>192.168.1.255:138</td>\n",
              "      <td>17</td>\n",
              "      <td>10.16</td>\n",
              "      <td>472</td>\n",
              "      <td>0</td>\n",
              "      <td>2</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>Benign</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>172.29.77.5:51989</td>\n",
              "      <td>192.168.1.255:15600</td>\n",
              "      <td>17</td>\n",
              "      <td>0.00</td>\n",
              "      <td>63</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>Benign</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379269</th>\n",
              "      <td>172.16.31.157:58032</td>\n",
              "      <td>192.168.1.194:80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>9433</td>\n",
              "      <td>1</td>\n",
              "      <td>ddos</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379270</th>\n",
              "      <td>172.24.214.65:58034</td>\n",
              "      <td>192.168.1.194:80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>9221</td>\n",
              "      <td>1</td>\n",
              "      <td>ddos</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379271</th>\n",
              "      <td>172.21.120.36:58036</td>\n",
              "      <td>192.168.1.194:80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>9656</td>\n",
              "      <td>1</td>\n",
              "      <td>ddos</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379272</th>\n",
              "      <td>172.28.23.110:58038</td>\n",
              "      <td>192.168.1.194:80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>10046</td>\n",
              "      <td>1</td>\n",
              "      <td>ddos</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379273</th>\n",
              "      <td>172.20.153.15:58040</td>\n",
              "      <td>192.168.1.194:80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>10485</td>\n",
              "      <td>1</td>\n",
              "      <td>ddos</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>1379274 rows × 12 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "               IPV4_SRC_ADDR          IPV4_DST_ADDR  ...  Label  Attack\n",
              "0        172.18.174.73:63318     52.139.250.253:443  ...      0  Benign\n",
              "1        172.21.105.22:57442    192.168.1.255:15600  ...      0  Benign\n",
              "2         172.27.67.73:57452  239.255.255.250:15600  ...      0  Benign\n",
              "3          172.24.40.184:138      192.168.1.255:138  ...      0  Benign\n",
              "4          172.29.77.5:51989    192.168.1.255:15600  ...      0  Benign\n",
              "...                      ...                    ...  ...    ...     ...\n",
              "1379269  172.16.31.157:58032       192.168.1.194:80  ...      1    ddos\n",
              "1379270  172.24.214.65:58034       192.168.1.194:80  ...      1    ddos\n",
              "1379271  172.21.120.36:58036       192.168.1.194:80  ...      1    ddos\n",
              "1379272  172.28.23.110:58038       192.168.1.194:80  ...      1    ddos\n",
              "1379273  172.20.153.15:58040       192.168.1.194:80  ...      1    ddos\n",
              "\n",
              "[1379274 rows x 12 columns]"
            ]
          },
          "execution_count": 8,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "data"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "id": "C_WU15ngvnBM"
      },
      "outputs": [],
      "source": [
        "data.drop(columns=['Label'],inplace = True)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "id": "Q0d3nbdiv37j"
      },
      "outputs": [],
      "source": [
        "data.rename(columns={\"Attack\": \"label\"},inplace = True)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "id": "yjS-hTKDzI29"
      },
      "outputs": [],
      "source": [
        "le = LabelEncoder()\n",
        "le.fit_transform(data.label.values)\n",
        "data['label'] = le.transform(data['label'])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "id": "SVgjPVfg03XG"
      },
      "outputs": [],
      "source": [
        "label = data.label"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "id": "ADl2Fj7H08Rr"
      },
      "outputs": [],
      "source": [
        "data.drop(columns=['label'],inplace = True)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "id": "qhsZMD3uwLk7"
      },
      "outputs": [],
      "source": [
        "scaler = StandardScaler()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "id": "aukoVdNf2zcp"
      },
      "outputs": [],
      "source": [
        "data =  pd.concat([data, label], axis=1)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 439
        },
        "id": "IP-ZEZW4nxSm",
        "outputId": "75bb0453-8aa9-4b3f-cf05-9c158734627a"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>IPV4_SRC_ADDR</th>\n",
              "      <th>IPV4_DST_ADDR</th>\n",
              "      <th>PROTOCOL</th>\n",
              "      <th>L7_PROTO</th>\n",
              "      <th>IN_BYTES</th>\n",
              "      <th>OUT_BYTES</th>\n",
              "      <th>IN_PKTS</th>\n",
              "      <th>OUT_PKTS</th>\n",
              "      <th>TCP_FLAGS</th>\n",
              "      <th>FLOW_DURATION_MILLISECONDS</th>\n",
              "      <th>label</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>172.18.174.73:63318</td>\n",
              "      <td>52.139.250.253:443</td>\n",
              "      <td>6</td>\n",
              "      <td>91.00</td>\n",
              "      <td>181</td>\n",
              "      <td>165</td>\n",
              "      <td>2</td>\n",
              "      <td>1</td>\n",
              "      <td>24</td>\n",
              "      <td>327</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>172.21.105.22:57442</td>\n",
              "      <td>192.168.1.255:15600</td>\n",
              "      <td>17</td>\n",
              "      <td>0.00</td>\n",
              "      <td>63</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>172.27.67.73:57452</td>\n",
              "      <td>239.255.255.250:15600</td>\n",
              "      <td>17</td>\n",
              "      <td>0.00</td>\n",
              "      <td>63</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>172.24.40.184:138</td>\n",
              "      <td>192.168.1.255:138</td>\n",
              "      <td>17</td>\n",
              "      <td>10.16</td>\n",
              "      <td>472</td>\n",
              "      <td>0</td>\n",
              "      <td>2</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>172.29.77.5:51989</td>\n",
              "      <td>192.168.1.255:15600</td>\n",
              "      <td>17</td>\n",
              "      <td>0.00</td>\n",
              "      <td>63</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379269</th>\n",
              "      <td>172.16.31.157:58032</td>\n",
              "      <td>192.168.1.194:80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>9433</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379270</th>\n",
              "      <td>172.24.214.65:58034</td>\n",
              "      <td>192.168.1.194:80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>9221</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379271</th>\n",
              "      <td>172.21.120.36:58036</td>\n",
              "      <td>192.168.1.194:80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>9656</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379272</th>\n",
              "      <td>172.28.23.110:58038</td>\n",
              "      <td>192.168.1.194:80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>10046</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1379273</th>\n",
              "      <td>172.20.153.15:58040</td>\n",
              "      <td>192.168.1.194:80</td>\n",
              "      <td>6</td>\n",
              "      <td>7.00</td>\n",
              "      <td>216</td>\n",
              "      <td>180</td>\n",
              "      <td>4</td>\n",
              "      <td>3</td>\n",
              "      <td>18</td>\n",
              "      <td>10485</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>1379274 rows × 11 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "               IPV4_SRC_ADDR  ... label\n",
              "0        172.18.174.73:63318  ...     0\n",
              "1        172.21.105.22:57442  ...     0\n",
              "2         172.27.67.73:57452  ...     0\n",
              "3          172.24.40.184:138  ...     0\n",
              "4          172.29.77.5:51989  ...     0\n",
              "...                      ...  ...   ...\n",
              "1379269  172.16.31.157:58032  ...     2\n",
              "1379270  172.24.214.65:58034  ...     2\n",
              "1379271  172.21.120.36:58036  ...     2\n",
              "1379272  172.28.23.110:58038  ...     2\n",
              "1379273  172.20.153.15:58040  ...     2\n",
              "\n",
              "[1379274 rows x 11 columns]"
            ]
          },
          "execution_count": 16,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "data"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "id": "PUa4uJbewQc7"
      },
      "outputs": [],
      "source": [
        "X_train, X_test, y_train, y_test = train_test_split(\n",
        "     data, label, test_size=0.4, random_state=42,stratify= label)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "z3DrIWDHqNxp",
        "outputId": "afdb1bda-42ae-4a6c-ed22-bd3eebf831bb"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/category_encoders/utils.py:21: FutureWarning: is_categorical is deprecated and will be removed in a future version.  Use is_categorical_dtype instead\n",
            "  elif pd.api.types.is_categorical(cols):\n"
          ]
        }
      ],
      "source": [
        "encoder = ce.TargetEncoder(cols=['TCP_FLAGS','L7_PROTO','PROTOCOL'])\n",
        "encoder.fit(X_train, y_train)\n",
        "X_train = encoder.transform(X_train)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "id": "EDKYHCbcqN81"
      },
      "outputs": [],
      "source": [
        "cols_to_norm = list(set(list(X_train.iloc[:, 2:].columns ))  - set(list(['label'])) )\n",
        "X_train[cols_to_norm] = scaler.fit_transform(X_train[cols_to_norm])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "id": "ek535MkWwUHN"
      },
      "outputs": [],
      "source": [
        "X_train['h'] = X_train[ cols_to_norm ].values.tolist()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "metadata": {
        "id": "OIrcNfMSwa0j"
      },
      "outputs": [],
      "source": [
        "G = nx.from_pandas_edgelist(X_train, \"IPV4_SRC_ADDR\", \"IPV4_DST_ADDR\", ['h','label'],create_using=nx.MultiGraph())"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "metadata": {
        "id": "QluLSxbiwn7M"
      },
      "outputs": [],
      "source": [
        "G = G.to_directed()\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "metadata": {
        "id": "2zClkKEzwrVb"
      },
      "outputs": [],
      "source": [
        "G = from_networkx(G,edge_attrs=['h','label'] )\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "id": "9jlBYgE8wsW7"
      },
      "outputs": [],
      "source": [
        "# Eq1\n",
        "G.ndata['h'] = th.ones(G.num_nodes(), G.edata['h'].shape[1])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "id": "E7Vc6IELwuJr"
      },
      "outputs": [],
      "source": [
        "G.edata['train_mask'] = th.ones(len(G.edata['h']), dtype=th.bool)\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "BIx7-W6s46Ju",
        "outputId": "67f2e7db-a13a-4e7e-be4b-1391149b7ddb"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "tensor([True, True, True,  ..., True, True, True])"
            ]
          },
          "execution_count": 26,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "G.edata['train_mask'] "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "metadata": {
        "id": "DzDap1MR5e95"
      },
      "outputs": [],
      "source": [
        "def compute_accuracy(pred, labels):\n",
        "    return (pred.argmax(1) == labels).float().mean().item()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "metadata": {
        "id": "5VzTQxAR5HoT"
      },
      "outputs": [],
      "source": [
        "class SAGELayer(nn.Module):\n",
        "    def __init__(self, ndim_in, edims, ndim_out, activation):\n",
        "        super(SAGELayer, self).__init__()\n",
        "        ### force to outut fix dimensions\n",
        "        self.W_msg = nn.Linear(ndim_in + edims, ndim_out)\n",
        "        ### apply weight\n",
        "        self.W_apply = nn.Linear(ndim_in + ndim_out, ndim_out)\n",
        "        self.activation = activation\n",
        "\n",
        "    def message_func(self, edges):\n",
        "        return {'m': self.W_msg(th.cat([edges.src['h'], edges.data['h']], 2))}\n",
        "\n",
        "    def forward(self, g_dgl, nfeats, efeats):\n",
        "        with g_dgl.local_scope():\n",
        "            g = g_dgl\n",
        "            g.ndata['h'] = nfeats\n",
        "            g.edata['h'] = efeats\n",
        "            # Eq4\n",
        "            g.update_all(self.message_func, fn.mean('m', 'h_neigh'))\n",
        "            # Eq5          \n",
        "            g.ndata['h'] = F.relu(self.W_apply(th.cat([g.ndata['h'], g.ndata['h_neigh']], 2)))\n",
        "            return g.ndata['h']\n",
        "\n",
        "\n",
        "class SAGE(nn.Module):\n",
        "    def __init__(self, ndim_in, ndim_out, edim, activation, dropout):\n",
        "        super(SAGE, self).__init__()\n",
        "        self.layers = nn.ModuleList()\n",
        "        self.layers.append(SAGELayer(ndim_in, edim, 128, activation))\n",
        "        self.layers.append(SAGELayer(128, edim, ndim_out, activation))\n",
        "        self.dropout = nn.Dropout(p=dropout)\n",
        "\n",
        "    def forward(self, g, nfeats, efeats):\n",
        "        for i, layer in enumerate(self.layers):\n",
        "            if i != 0:\n",
        "                nfeats = self.dropout(nfeats)\n",
        "            nfeats = layer(g, nfeats, efeats)\n",
        "        return nfeats.sum(1)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 29,
      "metadata": {
        "id": "hrLYvze5wwMi"
      },
      "outputs": [],
      "source": [
        "class MLPPredictor(nn.Module):\n",
        "    def __init__(self, in_features, out_classes):\n",
        "        super().__init__()\n",
        "        self.W = nn.Linear(in_features * 2, out_classes)\n",
        "\n",
        "    def apply_edges(self, edges):\n",
        "        h_u = edges.src['h']\n",
        "        h_v = edges.dst['h']\n",
        "        score = self.W(th.cat([h_u, h_v], 1))\n",
        "        return {'score': score}\n",
        "\n",
        "    def forward(self, graph, h):\n",
        "        with graph.local_scope():\n",
        "            graph.ndata['h'] = h\n",
        "            graph.apply_edges(self.apply_edges)\n",
        "            return graph.edata['score']"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "metadata": {
        "id": "GPLg-kCcwxLa"
      },
      "outputs": [],
      "source": [
        "G.ndata['h'] = th.reshape(G.ndata['h'], (G.ndata['h'].shape[0], 1,G.ndata['h'].shape[1]))\n",
        "G.edata['h'] = th.reshape(G.edata['h'], (G.edata['h'].shape[0], 1,G.edata['h'].shape[1]))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 31,
      "metadata": {
        "id": "SwdZs785w1dT"
      },
      "outputs": [],
      "source": [
        "class Model(nn.Module):\n",
        "    def __init__(self, ndim_in, ndim_out, edim, activation, dropout):\n",
        "        super().__init__()\n",
        "        self.gnn = SAGE(ndim_in, ndim_out, edim, activation, dropout)\n",
        "        self.pred = MLPPredictor(ndim_out, 10)\n",
        "    def forward(self, g, nfeats, efeats):\n",
        "        h = self.gnn(g, nfeats, efeats)\n",
        "        return self.pred(g, h)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 32,
      "metadata": {
        "id": "9ah_CyoGrfrB"
      },
      "outputs": [],
      "source": [
        "from sklearn.utils import class_weight\n",
        "class_weights = [5.1032e+01, 7.9973e+00, 4.2264e+00, 4.7852e+00, 5.9438e+01, 1.0651e+02,\n",
        "        8.8245e+01, 9.7360e+02, 10.4252e+01, 1.3800e-01]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 33,
      "metadata": {
        "id": "Cti0vAFYw3A0"
      },
      "outputs": [],
      "source": [
        "class_weights = th.FloatTensor(class_weights).cuda()\n",
        "criterion = nn.CrossEntropyLoss(weight = class_weights)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 34,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Rj3DHIZmw4IM",
        "outputId": "673d51ff-8ed8-463c-8ab3-f6c7f4609ac0"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "device(type='cuda', index=0)"
            ]
          },
          "execution_count": 34,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "G = G.to('cuda:0')\n",
        "G.device"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 35,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "qdlVG3JOw5Qj",
        "outputId": "5d9d3eb2-9d32-460f-c637-ae14314a5251"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "device(type='cuda', index=0)"
            ]
          },
          "execution_count": 35,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "G.ndata['h'].device\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 36,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "dvt3pnXmw6U7",
        "outputId": "ee6c43aa-2ed7-4c8f-efb4-c30358d502c5"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "device(type='cuda', index=0)"
            ]
          },
          "execution_count": 36,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "G.edata['h'].device\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 37,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "-_eTiHzWw8Cz",
        "outputId": "bc03099b-51f8-4efd-f2dd-60fd3df9dcd5"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Training acc: 0.49338480830192566\n",
            "Training acc: 0.5795575976371765\n",
            "Training acc: 0.6212359666824341\n",
            "Training acc: 0.6268723607063293\n",
            "Training acc: 0.6353545188903809\n",
            "Training acc: 0.6454473733901978\n",
            "Training acc: 0.6479613780975342\n",
            "Training acc: 0.6500028967857361\n",
            "Training acc: 0.6547657251358032\n",
            "Training acc: 0.6484314203262329\n",
            "Training acc: 0.6512596011161804\n",
            "Training acc: 0.6600987911224365\n",
            "Training acc: 0.6593846678733826\n",
            "Training acc: 0.6485613584518433\n",
            "Training acc: 0.6594070196151733\n",
            "Training acc: 0.664171040058136\n",
            "Training acc: 0.6688902974128723\n",
            "Training acc: 0.6673858761787415\n",
            "Training acc: 0.6684141755104065\n",
            "Training acc: 0.6666475534439087\n",
            "Training acc: 0.6615198850631714\n",
            "Training acc: 0.6691319346427917\n",
            "Training acc: 0.6582294702529907\n",
            "Training acc: 0.6720429062843323\n",
            "Training acc: 0.6738397479057312\n",
            "Training acc: 0.6652349829673767\n",
            "Training acc: 0.6706943511962891\n",
            "Training acc: 0.674399197101593\n",
            "Training acc: 0.6597175598144531\n",
            "Training acc: 0.6683338284492493\n",
            "Training acc: 0.6722018122673035\n",
            "Training acc: 0.6499993205070496\n",
            "Training acc: 0.666408896446228\n",
            "Training acc: 0.6763458847999573\n",
            "Training acc: 0.6763604283332825\n",
            "Training acc: 0.654382050037384\n",
            "Training acc: 0.675874650478363\n",
            "Training acc: 0.6769349575042725\n",
            "Training acc: 0.6727437376976013\n",
            "Training acc: 0.6766074895858765\n",
            "Training acc: 0.6775289177894592\n",
            "Training acc: 0.6592801809310913\n",
            "Training acc: 0.6758178472518921\n",
            "Training acc: 0.675396740436554\n",
            "Training acc: 0.6625058650970459\n",
            "Training acc: 0.6654017567634583\n",
            "Training acc: 0.6763537526130676\n",
            "Training acc: 0.6770412921905518\n",
            "Training acc: 0.6765440702438354\n"
          ]
        }
      ],
      "source": [
        "node_features = G.ndata['h']\n",
        "edge_features = G.edata['h']\n",
        "\n",
        "edge_label = G.edata['label']\n",
        "train_mask = G.edata['train_mask']\n",
        "\n",
        "model = Model(G.ndata['h'].shape[2], 128, G.ndata['h'].shape[2], F.relu, 0.2).cuda()\n",
        "opt = th.optim.Adam(model.parameters())\n",
        "\n",
        "for epoch in range(1,5000):\n",
        "    pred = model(G, node_features,edge_features).cuda()\n",
        "    loss = criterion(pred[train_mask] ,edge_label[train_mask])\n",
        "    opt.zero_grad()\n",
        "    loss.backward()\n",
        "    opt.step()\n",
        "    if epoch % 100 == 0:\n",
        "      print('Training acc:', compute_accuracy(pred[train_mask], edge_label[train_mask]))\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 38,
      "metadata": {
        "id": "p7gYo6lVtHCN"
      },
      "outputs": [],
      "source": [
        "X_test = encoder.transform(X_test)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 39,
      "metadata": {
        "id": "OUGIEbMFtSnf"
      },
      "outputs": [],
      "source": [
        "X_test[cols_to_norm] = scaler.transform(X_test[cols_to_norm])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 40,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 439
        },
        "id": "VlyqlEqjtb9s",
        "outputId": "2f198c30-f354-40f2-f908-c578e9692fbe"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>IPV4_SRC_ADDR</th>\n",
              "      <th>IPV4_DST_ADDR</th>\n",
              "      <th>PROTOCOL</th>\n",
              "      <th>L7_PROTO</th>\n",
              "      <th>IN_BYTES</th>\n",
              "      <th>OUT_BYTES</th>\n",
              "      <th>IN_PKTS</th>\n",
              "      <th>OUT_PKTS</th>\n",
              "      <th>TCP_FLAGS</th>\n",
              "      <th>FLOW_DURATION_MILLISECONDS</th>\n",
              "      <th>label</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>1186073</th>\n",
              "      <td>172.26.225.219:443</td>\n",
              "      <td>192.168.1.31:36052</td>\n",
              "      <td>0.312674</td>\n",
              "      <td>-1.185025</td>\n",
              "      <td>-0.007690</td>\n",
              "      <td>-0.020804</td>\n",
              "      <td>-0.006124</td>\n",
              "      <td>-0.006233</td>\n",
              "      <td>-2.069811</td>\n",
              "      <td>-0.055115</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>658600</th>\n",
              "      <td>172.18.135.214:36914</td>\n",
              "      <td>192.168.1.195:80</td>\n",
              "      <td>0.312674</td>\n",
              "      <td>0.753148</td>\n",
              "      <td>-0.005481</td>\n",
              "      <td>-0.005525</td>\n",
              "      <td>-0.004410</td>\n",
              "      <td>-0.003977</td>\n",
              "      <td>0.897105</td>\n",
              "      <td>-0.051606</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>681042</th>\n",
              "      <td>172.28.74.134:37866</td>\n",
              "      <td>192.168.1.190:80</td>\n",
              "      <td>0.312674</td>\n",
              "      <td>0.753148</td>\n",
              "      <td>-0.005343</td>\n",
              "      <td>-0.004975</td>\n",
              "      <td>-0.004752</td>\n",
              "      <td>-0.003413</td>\n",
              "      <td>0.897105</td>\n",
              "      <td>-0.054863</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>477472</th>\n",
              "      <td>172.18.244.36:47740</td>\n",
              "      <td>192.168.1.152:80</td>\n",
              "      <td>0.312674</td>\n",
              "      <td>0.753148</td>\n",
              "      <td>-0.003317</td>\n",
              "      <td>0.006410</td>\n",
              "      <td>-0.004410</td>\n",
              "      <td>-0.002849</td>\n",
              "      <td>0.897105</td>\n",
              "      <td>-0.054695</td>\n",
              "      <td>9</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1137968</th>\n",
              "      <td>172.22.20.209:35014</td>\n",
              "      <td>192.168.1.190:80</td>\n",
              "      <td>0.312674</td>\n",
              "      <td>0.753148</td>\n",
              "      <td>-0.007393</td>\n",
              "      <td>-0.020746</td>\n",
              "      <td>-0.005781</td>\n",
              "      <td>-0.006233</td>\n",
              "      <td>-0.380046</td>\n",
              "      <td>-0.055200</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8050</th>\n",
              "      <td>172.21.31.241:34786</td>\n",
              "      <td>192.168.1.195:80</td>\n",
              "      <td>0.312674</td>\n",
              "      <td>0.753148</td>\n",
              "      <td>-0.005387</td>\n",
              "      <td>-0.016143</td>\n",
              "      <td>-0.004752</td>\n",
              "      <td>-0.004541</td>\n",
              "      <td>0.897105</td>\n",
              "      <td>-0.054223</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>221607</th>\n",
              "      <td>172.26.68.87:33542</td>\n",
              "      <td>192.168.1.190:80</td>\n",
              "      <td>0.312674</td>\n",
              "      <td>0.753148</td>\n",
              "      <td>-0.003461</td>\n",
              "      <td>-0.004975</td>\n",
              "      <td>-0.004752</td>\n",
              "      <td>-0.003413</td>\n",
              "      <td>0.897105</td>\n",
              "      <td>-0.055073</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>204101</th>\n",
              "      <td>172.22.43.189:48886</td>\n",
              "      <td>192.168.1.190:80</td>\n",
              "      <td>0.312674</td>\n",
              "      <td>0.753148</td>\n",
              "      <td>-0.004867</td>\n",
              "      <td>-0.004975</td>\n",
              "      <td>-0.004410</td>\n",
              "      <td>-0.003413</td>\n",
              "      <td>0.897105</td>\n",
              "      <td>-0.055031</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1195738</th>\n",
              "      <td>172.27.129.92:39934</td>\n",
              "      <td>192.168.1.184:443</td>\n",
              "      <td>0.312674</td>\n",
              "      <td>-1.185025</td>\n",
              "      <td>-0.007393</td>\n",
              "      <td>-0.020746</td>\n",
              "      <td>-0.005781</td>\n",
              "      <td>-0.006233</td>\n",
              "      <td>-0.380046</td>\n",
              "      <td>-0.055200</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>309021</th>\n",
              "      <td>172.19.233.181:40238</td>\n",
              "      <td>192.168.1.195:80</td>\n",
              "      <td>0.312674</td>\n",
              "      <td>0.753148</td>\n",
              "      <td>-0.007056</td>\n",
              "      <td>-0.020225</td>\n",
              "      <td>-0.005095</td>\n",
              "      <td>-0.005105</td>\n",
              "      <td>0.897411</td>\n",
              "      <td>0.116520</td>\n",
              "      <td>4</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>551710 rows × 11 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "                IPV4_SRC_ADDR  ... label\n",
              "1186073    172.26.225.219:443  ...     0\n",
              "658600   172.18.135.214:36914  ...     4\n",
              "681042    172.28.74.134:37866  ...     4\n",
              "477472    172.18.244.36:47740  ...     9\n",
              "1137968   172.22.20.209:35014  ...     4\n",
              "...                       ...  ...   ...\n",
              "8050      172.21.31.241:34786  ...     4\n",
              "221607     172.26.68.87:33542  ...     4\n",
              "204101    172.22.43.189:48886  ...     4\n",
              "1195738   172.27.129.92:39934  ...     2\n",
              "309021   172.19.233.181:40238  ...     4\n",
              "\n",
              "[551710 rows x 11 columns]"
            ]
          },
          "execution_count": 40,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "X_test"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 41,
      "metadata": {
        "id": "q5CMxVe5xIDb"
      },
      "outputs": [],
      "source": [
        "X_test['h'] = X_test[ cols_to_norm ].values.tolist()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 42,
      "metadata": {
        "id": "VsAmtLAbxN_6"
      },
      "outputs": [],
      "source": [
        "G_test = nx.from_pandas_edgelist(X_test, \"IPV4_SRC_ADDR\", \"IPV4_DST_ADDR\", ['h','label'],create_using=nx.MultiGraph())\n",
        "G_test = G_test.to_directed()\n",
        "G_test = from_networkx(G_test,edge_attrs=['h','label'] )\n",
        "actual = G_test.edata.pop('label')\n",
        "G_test.ndata['feature'] = th.ones(G_test.num_nodes(), G.ndata['h'].shape[2])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 43,
      "metadata": {
        "id": "Eeux6JIxxQtC"
      },
      "outputs": [],
      "source": [
        "G_test.ndata['feature'] = th.reshape(G_test.ndata['feature'], (G_test.ndata['feature'].shape[0], 1, G_test.ndata['feature'].shape[1]))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 44,
      "metadata": {
        "id": "PBETQI3YxYay"
      },
      "outputs": [],
      "source": [
        "G_test.edata['h'] = th.reshape(G_test.edata['h'], (G_test.edata['h'].shape[0], 1, G_test.edata['h'].shape[1]))\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 45,
      "metadata": {
        "id": "qlTOyVN6xZZB"
      },
      "outputs": [],
      "source": [
        "G_test = G_test.to('cuda:0')\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 46,
      "metadata": {
        "id": "QyugNIt9xac6"
      },
      "outputs": [],
      "source": [
        "import timeit\n",
        "start_time = timeit.default_timer()\n",
        "node_features_test = G_test.ndata['feature']\n",
        "edge_features_test = G_test.edata['h']\n",
        "test_pred = model(G_test, node_features_test, edge_features_test).cuda()\n",
        "elapsed = timeit.default_timer() - start_time"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 46,
      "metadata": {
        "id": "0yu7IsTnlqK0"
      },
      "outputs": [],
      "source": []
    },
    {
      "cell_type": "code",
      "execution_count": 47,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "KecCvilSxcFK",
        "outputId": "f768e819-21d5-4701-af7c-393e19f15d69"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "0.11393688899988774 seconds\n"
          ]
        }
      ],
      "source": [
        "print(str(elapsed) + ' seconds')\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 48,
      "metadata": {
        "id": "BNQLnLoAxdST"
      },
      "outputs": [],
      "source": [
        "test_pred = test_pred.argmax(1)\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 49,
      "metadata": {
        "id": "9dtggXXsxevx"
      },
      "outputs": [],
      "source": [
        "test_pred = th.Tensor.cpu(test_pred).detach().numpy()\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 54,
      "metadata": {
        "id": "5TGb_KWRxfzS"
      },
      "outputs": [],
      "source": [
        "actual = le.inverse_transform(actual)\n",
        "test_pred = le.inverse_transform(test_pred)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 55,
      "metadata": {
        "id": "n7z7tHTPxhBC"
      },
      "outputs": [],
      "source": [
        "from sklearn.metrics import plot_confusion_matrix\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 56,
      "metadata": {
        "id": "uMRairwzxiBC"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "\n",
        "\n",
        "def plot_confusion_matrix(cm,\n",
        "                          target_names,\n",
        "                          title='Confusion matrix',\n",
        "                          cmap=None,\n",
        "                          normalize=True):\n",
        "    \n",
        "    import matplotlib.pyplot as plt\n",
        "    import numpy as np\n",
        "    import itertools\n",
        "\n",
        "    accuracy = np.trace(cm) / float(np.sum(cm))\n",
        "    misclass = 1 - accuracy\n",
        "\n",
        "    if cmap is None:\n",
        "        cmap = plt.get_cmap('Blues')\n",
        "\n",
        "    plt.figure(figsize=(12, 12))\n",
        "    plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
        "    plt.title(title)\n",
        "    plt.colorbar()\n",
        "\n",
        "    if target_names is not None:\n",
        "        tick_marks = np.arange(len(target_names))\n",
        "        plt.xticks(tick_marks, target_names, rotation=45)\n",
        "        plt.yticks(tick_marks, target_names)\n",
        "\n",
        "    if normalize:\n",
        "        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n",
        "\n",
        "\n",
        "    thresh = cm.max() / 1.5 if normalize else cm.max() / 2\n",
        "    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
        "        if normalize:\n",
        "            plt.text(j, i, \"{:0.4f}\".format(cm[i, j]),\n",
        "                     horizontalalignment=\"center\",\n",
        "                     color=\"white\" if cm[i, j] > thresh else \"black\")\n",
        "        else:\n",
        "            plt.text(j, i, \"{:,}\".format(cm[i, j]),\n",
        "                     horizontalalignment=\"center\",\n",
        "                     color=\"white\" if cm[i, j] > thresh else \"black\")\n",
        "\n",
        "\n",
        "    plt.tight_layout()\n",
        "    plt.ylabel('True label')\n",
        "    plt.xlabel('Predicted label\\naccuracy={:0.4f}; misclass={:0.4f}'.format(accuracy, misclass))\n",
        "    plt.show()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 57,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 709
        },
        "id": "KNCkVWyqxjaR",
        "outputId": "48f77bad-b02a-468b-d2c5-dbb5385dddff"
      },
      "outputs": [
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAANYCAYAAAAR86Z+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3gU1RrH8e8LIYQeeklApEiooRcpVpqAoIKAKKAU61X02gsiggVsqFiwYUdBqYpiQwGVXgQRCEUIIAJKDRASzv1jl3UCCXgh2d2E3+d59mH3zJmZd2Z2ln33lJhzDhEREREREfHJFeoAREREREREwomSJBEREREREQ8lSSIiIiIiIh5KkkRERERERDyUJImIiIiIiHhEhDoAERERERHJWO7CZzmXciDUYZyQO7D9S+dcu1DHkVmUJImIiIiIhDGXcoC81a4MdRgndHDJ6BKhjiEzqbudiIiIiIiIh5IkERERERERD3W3ExEREREJawamto1g0tkWERERERHxUJIkIiIiIiLioe52IiIiIiLhzACzUEdxRlFLkoiIiIiIiIeSJBEREREREQ8lSSIiIiIiIh4akyQiIiIiEu40BXhQ6WyLiIiIiIh4KEkSERERERHxUHc7EREREZFwpynAg0otSSIiIiIiIh5KkkRERERERDzU3U5EREREJKyZZrcLMp1tERERERERDyVJIiIiIiIiHkqSREREREREPDQmSUREREQk3GkK8KBSS5KIiIiIiIiHkiQREREREREPdbcTEREREQlnhqYADzKdbREREREREQ8lSSIiIiIiIh7qbiciIiIiEtZMs9sFmVqSREREREREPJQkiYiIiIiIeKi7nYiIiIhIuNPsdkGlsy0iIiIiIuKhJElERERERMRDSZKIiIiIiIiHxiSJiIiIiIQ7TQEeVGpJEhERERER8VCSJCIiIiIi4qHudiIiIiIiYc00BXiQ6WyLiIiIiIh4KEkSERERERHxUHc7EREREZFwZmh2uyBTS5KIiIiIiIiHkiQREREREREPdbcTEREREQl3mt0uqHS2RUREREREPJQkiYiIiIiIeChJEhERERER8dCYJBERERGRsGYakxRkOtsiIiIiIiIeSpJEREREREQ81N1ORERERCTc5bJQR3BGUUuSiIiIiIiIh5IkERERERERD3W3ExEREREJZ4ZmtwsynW0REREREREPJUkiIiIiIiIe6m4nIiIiIhLuTLPbBZNakkRERERERDyUJImIiIiIiHgoSRIREREREfHQmCQRERERkbBmmgI8yHS2RUREREREPJQkiYiIiIiIeKi7nYiIiIhIuNMU4EGlliQREREREREPJUkiIiIiIiIe6m4nIiIiIhLuNLtdUOlsi4iIiIiIeChJEhERERER8VCSJCIiIiIi4qExSSIiIiIi4cxMU4AHmVqSREREREREPJQkiYiIiIiIeKi7nYiIiIhIuNMU4EGlsy0iIiIiIuKhJElERERERMRD3e1ERERERMKdZrcLKrUkiYiIiIiIeChJEhERERER8VB3OxERERGRsGaa3S7IdLZFREREREQ8lCSJiIiIiIh4KEkSERERERHx0JgkEREREZFwpynAg0otSSIiIiIiIh5KkkRERERERDzU3U5EREREJJwZmgI8yHS2RUREREREPJQkiYiIiIiIeKi7nYiIiIhIWDN1twsynW0REREREREPJUkiIiIiIiIe6m4nIiIiIhLu9Mdkg0otSSIiIiIiIh5KkkREchAzy2dmU81st5mNP43t9DKzGZkZWyiY2XQz6xPqOEREJHtRkiQiEgJmdpWZLTCzfWa21f9lvkUmbLorUBoo7pzrdqobcc6975xrkwnxpGFm55uZM7OJx5TH+8tn/svtDDGz905WzznX3jn39imGKyIiZyiNSRIRCTIzuwO4F7gB+BJIBtoBnYHZp7n5s4DVzrmU09xOVtoONDOz4s65nf6yPsDqzNqBmRlgzrkjmbVNEZGQ0hTgQaWzLSISRGZWBBgK3Oyc+9Q5t985d9g5N9U5d5e/Tl4ze87Mtvgfz5lZXv+y880s0cz+a2Z/+luhrvUvewQYDHT3t1D1O7bFxcwq+ltsIvyv+5rZOjPba2brzayXp3y2Z71zzWy+vxvffDM717Nsppk9amZz/NuZYWYlTnAakoFJQA//+rmB7sD7x5yrUWa2ycz2mNlCM2vpL28H3O85zqWeOIab2RwgCajkL+vvX/6ymX3i2f6TZvaNP6ESEREJUJIkIhJczYAoYOIJ6jwANAXqAvFAY+BBz/IyQBEgBugHjDazos65h4HHgI+ccwWdc2+cKBAzKwA8D7R3zhUCzgWWpFOvGPCZv25x4BngMzMr7ql2FXAtUAqI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zrkDZnYT8IWZ7QfmZ03oIiIiIiISTnJEkuScy/CP+jjnRgGj0llUy1PnKc/zvp463znn4syXYY0GFvjrDDlmH7UQEREREcki2W1iluwux3W3y2QD/C1UK4Ai+Ga7ExERERGRHCxHtCRlFefcs8CzoY5DRERERESCR0mSiIiIiEg4M/9Dgkbd7URERERERDyUJImIiIiIiHiou52IiIiISJjT7HbBpZYkERERERERDyVJIiIiIiIiHupuJyIiIiISxgxTd7sgU0uSiIiIiIiIh5IkERERERERDyVJIiIiIiIiHhqTJCIiIiIS5jQmKbjUkiQiIiIiIuKhJElERERERMRD3e1ERERERMKdetsFlVqSREREREREPJQkiYiIiIiIeKi7nYiIiIhIODPNbhdsakkSERERERHxUJIkIiIiIiLioSRJRERERETEQ2OSRERERETCnMYkBZdakkRERERERDyUJImIiIiIiHiou12QVClZgMnXNw11GEF38HBqqEMIiag8uUMdgoiIiOQg6m4XXGpJEhERERER8VCSJCIiIiIi4qHudiIiIiIiYcwwdbcLMrUkiYiIiIiIeChJEhERERER8VB3OxERERGRcKfedkGlliQREREREREPJUkiIiIiIiIeSpJEREREREQ8NCZJRERERCScGZoCPMjUkiQiIiIiIuKhJElERERERMRD3e1ERERERMKcutsFl1qSREREREREPJQkiYiIiIiIeKi7nYiIiIhImFN3u+BSS5KIiIiIiIiHkiQREREREREPdbcTEREREQl36m0XVGpJEhERERER8VCSJCIiIiIi4qEkSURERERExENjkkREREREwpymAA8utSTlMM8/9yz142vSoG4tel/dk4MHD+Kc4+GHHqB2jXOoW7s6o194PtRh/iu3XN+fqmeVpVnD+EDZ8EcG07xxPVo2acDlndqxdcuW49bb+PsGyhYrSMsmDWjZpAG3/+cmAPbu3Rsoa9mkAZXLl+a+u+5Is+6USZ9SNH8EixcuyNqDywIzvvyCOjWrUTOuCiNHPBHqcILmTD3u9O71M8GuXbvo2b0r8bXiqFu7Oj//9FOoQwqKnPw+v77/dVQoV4oGdWsFyu675y7ia8XRqF4drux6Gbt27UqzzsaNGykRXZBnn3kq2OEGRU6+3hk5E49ZwpuSpBxk8+bNvDT6eeb8vICF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W1gkSUdmuxMREREREfmvwm1MkoiIiIiIyH8SFi1JIiIiIiLhygwiwnAGuVB23CTJzF4FjvvdPs65W/wSkYiIiIiISBCdqCVpWcCiEBERERERCRHHTZKcc6N9l82skHNun/9DEhERERERX+ptF1gnnbjBzJqY2RrgJ+9yfTN73e+RiYiIiIiIBEFOZrd7CWgL/AXgnFsJnOfPoERERERERIIlR1OAO+e2/KMo0w+xiIiIiIiIBF1OpgDfYmZNAWdm+YFbgR/9G5aIiIiIiBxhGpQUUDlpSboOuBGIArYCcd5lERERERGRsHPSliTn3HagTwBiERERERERCbqczG5XxcymmNk2M/vTzCaZWZVABCciIiIiIp4pwEP5EW5y0t3uA+AjoBxQHpgIfOjPoERERERERIIlJ0lSIefcWOdchvfxPnCGvwMTEREREREJhuOOSTKzs71PvzSzwcB4wAE9gS8CEJuIiIiISJ5nGBHh2KcthJ1o4oZkPEnRkTNyrc86B9znr6BERERERESC5bhJknOuciADERERERERCQU5+TJZzKwOUBufsUjOuTH+CkpERERERCRYTpokmdkjQEtnY5lSAAAgAElEQVQ8SdIXQDtgPqAkSURERETE38J0mu1QlpPZ7boDFwK/O+euBuoDZ/k1KhERERERkSDJSZK03zl3GMgws2LAn0AF/4YlIiIiIiISHDkZk7TMzIoDb+OZ8W4PsNCvUYmIiIiISBZTf7uAOmmS5Jy7wft0hJl9BRRzzq3yb1giIiIiIiLBcaIvk40/0Trn3HL/hBSeDIjMl5PejSKS2+xcOjzYIUiAFC6Yo0lhRUQklzvR1f75E6xzQKvTHIuIiIiIiGRDt9oD60RfJntBIAMREREREREJBUpKRUREREREfKhztYiIiIhICDM0u12gqSVJRERERETEx0mTJPO4wswe9i5XNLNG/g9NREREREQk8HLSkvQ60ATo7V3+H/Ca3yISEREREREJopyMSUpyzsWb2QoA59xOMyvg57hERERERMQrQkOSAionLUmHzCwfnu9GwsxKA4f9GpWIiIiIiEiQ5CRJegX4DChjZkOA+cBTfo1KREREREQkSE7a3c45N87MkoEL8cxA2Nk596PfIxMREREREUDd7QLtpEmSmVUE9gFTfMucc7/6MzAREREREZFgyMnEDdPwjEcy4Ayg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PgXmAzOBH0v4OUVEREREJEXSdkxSOjOz7d19uZntDEwjjG/6dlP3KckxSeksV+uaJbeU5JikdKUxSblFY5JyS65+d6f7mKSnR7yVdBib1KqWxiQJjDazCkBZ4NY/SpBERERERLZGbqauyVGStAXc/eCkYxARERERkZKRm/USIiIiIiIiG6EkSUREREREJEbldiIiIiIi6U6DklJKPUkiIiIiIiIxSpJERERERERiVG4nIiIiIpLGDDDV26WUepJERERERERilCSJiIiIiIjEqNxORERERCSdGZiq7VJKPUkiIiIiIiIxSpJERERERERiVG4nIiIiIpLmVG2XWupJEhERERERiVGSJCIiIiIiEqMkSUREREREJEZjkkRERERE0p0GJaWUepJERERERERilCSJiIiIiIjEqNxORERERCStGaZ6u5RST5KIiIiIiEiMkiQREREREZEYlduJiIiIiKQ5U7VdSqknSUREREREJEY9SSIiW+mLb35OOoSUq19tp6RDSESpUjqVm0tMp+5FcpaSJBERERGRNGboWrKppnI7ERERERGRGCVJIiIiIiIiMUqSREREREREYjQmSUREREQk3WlQUkqpJ0lERERERCRGSZKIiIiIiEiMyu1ERERERNKcqd4updSTJCIiIiIiEqMkSUREREREJEbldiIiIiIiac5UbZdS6kkSERERERGJUZIkIiIiIiISo3I7EREREZE0p2q71FJPkoiIiIiISIySJBERERERkRglSSIiIiIiIjEakyQiIiIiks4MDUpKMfUkiYiIiIiIxChJEhERERERiVG5nYiIiIhImjPV26WUepJERERERERilCSJiIiIiIjEKEnKMOee3Zs983ejeeMGRa7/79dfc2SHw2nZtBEdDj+EBQsWrLf+p59+Yu+a1fjbXy8E4Oeff6ZV8yaFt2p77MoVl11S4u0oSePHjaVhvX2pV2dv+t59Z9LhlJhzz+pN9SqVada4fuGya666gkb169CiSUNOPP4YfvjhhwQjTI1M3t/zvpxDj85tCm8HN6zG8/37cc1FZxQu69a2AT06t/ndfb9Z+F9O7dqOHp3bcGKH1gx7rv/vtrn07JPo3nH/wt//ecf1HH94C07udABX/OUUfv4p814fP/zwAyd3P55G9evQuEFdpr77btIhFZtNte3+++6hXBlj6dKlAHz+2Wcc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ERERMdwl325IZSYpIiIiIiKiIUFSREREREREQ4KkiIiIiIiIhqxJioiIiIgY5pRFSUMqM0kRERERERENCZIiIiIiIiIakm4XERERETHMKdl2QyozSREREREREQ0JkiIiIiIiIhqSbhcRERERMcwl225oZSYpIiIiIiKiIUFSREREREREQ9LtIiIiIiKGu+TbDanMJEVERERERDQkSIqIiIiIiGhIkBQREREREdGQNUkREREREcOcsihpSGUmKSIiIiIioiFBUkREREREREOCpIiIiIiIYUyANLz/9Ot9SFtIekTSY5IOHdQPbS4lSIqIiIiIiEElaX7ge8CWwChgZ0mj2juqviVIioiIiIiIwbYe8Jjtx22/AVwIbNvmMfUp1e0iIiIiIoaxyZPvnLjIglqm3eOYhYUl/abxfILtCY3nywNPNZ5PAz4+JCObAwmSIiIiIiKGMdtbtHsM85qk20VERERExGB7Glix8XyFum1YSpAUERERERGDbRKwqqSVJb0LGAtc2eYx9SnpdhERERERMahsvylpHDARmB84y/YDbR5Wn2S73WOIiIiIiIgYNpJuFxERERER0ZAgKSIiIiIioiFBUkREREREREOCpIiIiIiIiIYESREREREREQ0JkiIiIiIiIhoSJEVERERERDT8f+c5wzs4gmzMAAAAAElFTkSuQmCC",
            "text/plain": [
              "<Figure size 864x864 with 2 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light",
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "from sklearn.metrics import confusion_matrix\n",
        "\n",
        "plot_confusion_matrix(cm = confusion_matrix(actual, test_pred), \n",
        "                      normalize    = False,\n",
        "                      target_names = np.unique(actual),\n",
        "                      title        = \"Confusion Matrix\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "KZwPghTY57p1"
      },
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "collapsed_sections": [],
      "machine_shape": "hm",
      "name": "Unsw_ton_iot_multiclass_mean_agg.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
